useStateã§Reactã¢ããªã±ãŒã·ã§ã³ãæé©åãå¹ççãªç¶æ 管çãšããã©ãŒãã³ã¹åäžã®ããã®é«åºŠãªãã¯ããã¯ãåŠã³ãŸãããã
React useState: ã¹ããŒãããã¯ã®æé©åæŠç¥ããã¹ã¿ãŒãã
useStateããã¯ã¯ãReactã§ã³ã³ããŒãã³ãã®ç¶æ
ã管çããããã®åºæ¬çãªæ§æèŠçŽ ã§ããéåžžã«å€æ©èœã§äœ¿ããããäžæ¹ã§ãäžé©åãªäœ¿çšã¯ãç¹ã«è€éãªã¢ããªã±ãŒã·ã§ã³ã«ãããŠããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ã€ãªããå¯èœæ§ããããŸãããã®å
æ¬çãªã¬ã€ãã§ã¯ãReactã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãšä¿å®æ§ã確ä¿ããããã«useStateãæé©åããããã®é«åºŠãªæŠç¥ãæ¢ããŸãã
useStateãšãã®åœ±é¿ãçè§£ãã
æé©åãã¯ããã¯ã«é£ã³èŸŒãåã«ãuseStateã®åºæ¬ãããããããŸããããuseStateããã¯ã¯ã颿°ã³ã³ããŒãã³ãã«ç¶æ
ãæãããããšãå¯èœã«ããŸããããã¯ç¶æ
倿°ãšããã®å€æ°ãæŽæ°ããããã®é¢æ°ãè¿ããŸããç¶æ
ãæŽæ°ããããã³ã«ãã³ã³ããŒãã³ãã¯åã¬ã³ããªã³ã°ãããŸãã
åºæ¬çãªäŸ:
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
Count: {count}
);
}
export default Counter;
ãã®ç°¡åãªäŸã§ã¯ããIncrementããã¿ã³ãã¯ãªãã¯ãããšcountã®ç¶æ
ãæŽæ°ãããCounterã³ã³ããŒãã³ãã®åã¬ã³ããªã³ã°ãããªã¬ãŒãããŸããããã¯å°ããªã³ã³ããŒãã³ãã§ã¯å®ç§ã«æ©èœããŸãããå€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ã®å¶åŸ¡ãããŠããªãåã¬ã³ããªã³ã°ã¯ãããã©ãŒãã³ã¹ã«æ·±å»ãªåœ±é¿ãäžããå¯èœæ§ããããŸãã
ãªãuseStateãæé©åããã®ãïŒ
äžèŠãªåã¬ã³ããªã³ã°ã¯ãReactã¢ããªã±ãŒã·ã§ã³ã«ãããããã©ãŒãã³ã¹åé¡ã®äž»ãªåå ã§ãããã¹ãŠã®åã¬ã³ããªã³ã°ã¯ãªãœãŒã¹ãæ¶è²»ãããŠãŒã¶ãŒäœéšã®äœäžã«ã€ãªããå¯èœæ§ããããŸããuseStateãæé©åããããšã¯ã以äžã®å©ãã«ãªããŸãïŒ
- äžèŠãªåã¬ã³ããªã³ã°ã®åæžïŒ ç¶æ ãå®éã«ã¯å€æŽãããŠããªãå Žåã«ãã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãããã®ãé²ããŸãã
- ããã©ãŒãã³ã¹ã®åäžïŒ ã¢ããªã±ãŒã·ã§ã³ãããéããããå¿çæ§ã®é«ããã®ã«ããŸãã
- ä¿å®æ§ã®åäžïŒ ããã¯ãªãŒã³ã§å¹ççãªã³ãŒããæžããŸãã
æé©åæŠç¥1ïŒé¢æ°ã«ããæŽæ°
以åã®ç¶æ
ã«åºã¥ããŠç¶æ
ãæŽæ°ããå Žåã¯ãåžžã«é¢æ°åœ¢åŒã®setCountã䜿çšããŠãã ãããããã«ãããå€ãã¯ããŒãžã£ã®åé¡ãé²ããåžžã«ææ°ã®ç¶æ
ã§äœæ¥ããŠããããšãä¿èšŒãããŸãã
äžé©åïŒåé¡ãçºçããå¯èœæ§ããïŒïŒ
function Counter() {
const [count, setCount] = useState(0);
const increment = () => {
setTimeout(() => {
setCount(count + 1); // å€ã'count'ã®å€ã§ããå¯èœæ§ããã
}, 1000);
};
return (
Count: {count}
);
}
é©åïŒé¢æ°ã«ããæŽæ°ïŒïŒ
function Counter() {
const [count, setCount] = useState(0);
const increment = () => {
setTimeout(() => {
setCount(prevCount => prevCount + 1); // æ£ãã'count'ã®å€ãä¿èšŒãã
}, 1000);
};
return (
Count: {count}
);
}
setCount(prevCount => prevCount + 1)ã䜿çšããããšã§ãsetCountã«æž¡ãã®ã¯é¢æ°ã«ãªããŸããReactã¯ç¶æ
ã®æŽæ°ããã¥ãŒã«å
¥ããææ°ã®ç¶æ
å€ã§ãã®é¢æ°ãå®è¡ãããããå€ãã¯ããŒãžã£ã®åé¡ãåé¿ã§ããŸãã
æé©åæŠç¥2ïŒäžå€ïŒã€ãã¥ãŒã¿ãã«ïŒãªç¶æ æŽæ°
ç¶æ å ã®ãªããžã§ã¯ããé åãæ±ãéã¯ãåžžã«äžå€ïŒã€ãã¥ãŒã¿ãã«ïŒãªæ¹æ³ã§æŽæ°ããŠãã ãããç¶æ ãçŽæ¥å€æŽããŠããReactã¯åç §ã®ç䟡æ§ã«ãã£ãŠå€æŽãæ€åºãããããåã¬ã³ããªã³ã°ã¯ããªã¬ãŒãããŸããã代ããã«ãç®çã®å€æŽãå ãããªããžã§ã¯ããé åã®æ°ããã³ããŒãäœæããŸãã
äžé©åïŒç¶æ ã®çŽæ¥å€æŽïŒïŒ
function ShoppingCart() {
const [items, setItems] = useState([{ id: 1, name: 'Apple', quantity: 2 }]);
const updateQuantity = (id, newQuantity) => {
const item = items.find(item => item.id === id);
if (item) {
item.quantity = newQuantity; // çŽæ¥çãªå€æŽïŒåã¬ã³ããªã³ã°ã¯ããªã¬ãŒãããŸããã
setItems(items); // Reactã倿Žãæ€åºããªããããåé¡ãçºçããŸãã
}
};
return (
{items.map(item => (
{item.name} - Quantity: {item.quantity}
))}
);
}
é©åïŒäžå€ãªæŽæ°ïŒïŒ
function ShoppingCart() {
const [items, setItems] = useState([{ id: 1, name: 'Apple', quantity: 2 }]);
const updateQuantity = (id, newQuantity) => {
setItems(prevItems =>
prevItems.map(item =>
item.id === id ? { ...item, quantity: newQuantity } : item
)
);
};
return (
{items.map(item => (
{item.name} - Quantity: {item.quantity}
))}
);
}
ä¿®æ£çã§ã¯ã.map()ã䜿çšããŠæŽæ°ãããã¢ã€ãã ãå«ãæ°ããé
åãäœæããŠããŸããã¹ãã¬ããæŒç®åïŒ...itemïŒã¯ãæ¢åã®ããããã£ãæã€æ°ãããªããžã§ã¯ããäœæããããã«äœ¿çšããããã®åŸquantityããããã£ãæ°ããå€ã§äžæžãããŸããããã«ãããsetItemsãæ°ããé
åãåãåããåã¬ã³ããªã³ã°ãããªã¬ãŒãããŠUIãæŽæ°ãããããšãä¿èšŒãããŸãã
æé©åæŠç¥3ïŒuseMemoã䜿çšããŠäžèŠãªåã¬ã³ããªã³ã°ãåé¿ãã
useMemoããã¯ã¯ãèšç®çµæãã¡ã¢åããããã«äœ¿çšã§ããŸããããã¯ãèšç®ãé«äŸ¡ã§ãç¹å®ã®ç¶æ
倿°ã«ã®ã¿äŸåããå Žåã«äŸ¿å©ã§ãããããã®ç¶æ
倿°ã倿ŽãããŠããªãå ŽåãuseMemoã¯ãã£ãã·ã¥ãããçµæãè¿ããèšç®ã®åå®è¡ãé²ããäžèŠãªåã¬ã³ããªã³ã°ãåé¿ããŸãã
äŸ:
import React, { useState, useMemo } from 'react';
function ExpensiveComponent({ data }) {
const [multiplier, setMultiplier] = useState(2);
// 'data'ãš'multiplier'ã«ã®ã¿äŸåããé«äŸ¡ãªèšç®
const processedData = useMemo(() => {
console.log('ããŒã¿ãåŠçäž...');
// é«äŸ¡ãªæäœãã·ãã¥ã¬ãŒã
let result = data.map(item => item * multiplier);
return result;
}, [data, multiplier]);
return (
Processed Data: {processedData.join(', ')}
);
}
function App() {
const [data, setData] = useState([1, 2, 3, 4, 5]);
return (
);
}
export default App;
ãã®äŸã§ã¯ãprocessedDataã¯dataãŸãã¯multiplierã倿Žãããå Žåã«ã®ã¿åèšç®ãããŸããExpensiveComponentã®ä»ã®ç¶æ
éšåã倿Žãããå Žåãã³ã³ããŒãã³ãã¯åã¬ã³ããªã³ã°ãããŸãããprocessedDataã¯åèšç®ããããåŠçæéãç¯çŽã§ããŸãã
æé©åæŠç¥4ïŒuseCallbackã䜿çšããŠé¢æ°ãã¡ã¢åãã
useMemoãšåæ§ã«ãuseCallbackã¯é¢æ°ãã¡ã¢åããŸããããã¯ã颿°ãåã³ã³ããŒãã³ãã«propsãšããŠæž¡ãå Žåã«ç¹ã«äŸ¿å©ã§ããuseCallbackãªãã§ã¯ãã¬ã³ããªã³ã°ããšã«æ°ãã颿°ã€ã³ã¹ã¿ã³ã¹ãäœæãããpropsãå®éã«ã¯å€æŽãããŠããªããŠãåã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãããåå ãšãªããŸããããã¯ãReactãpropsãç°ãªããã©ãããå³å¯ãªç䟡æ§ïŒ===ïŒã§ãã§ãã¯ããæ°ãã颿°ã¯åžžã«åã®é¢æ°ãšã¯ç°ãªããšå€æãããããã§ãã
äŸ:
import React, { useState, useCallback } from 'react';
const Button = React.memo(({ onClick, children }) => {
console.log('Button rendered');
return ;
});
function ParentComponent() {
const [count, setCount] = useState(0);
// increment颿°ãã¡ã¢åãã
const increment = useCallback(() => {
setCount(prevCount => prevCount + 1);
}, []); // 空ã®äŸåé
åã¯ããã®é¢æ°ãäžåºŠã ãäœæãããããšãæå³ããŸã
return (
Count: {count}
);
}
export default ParentComponent;
ãã®äŸã§ã¯ãincrement颿°ã¯ç©ºã®äŸåé
åãæã€useCallbackã䜿çšããŠã¡ã¢åãããŠããŸããããã¯ãã³ã³ããŒãã³ããããŠã³ãããããšãã«ãã®é¢æ°ãäžåºŠã ãäœæãããããšãæå³ããŸããButtonã³ã³ããŒãã³ãã¯React.memoã§ã©ãããããŠãããããpropsã倿Žãããå Žåã«ã®ã¿åã¬ã³ããªã³ã°ãããŸããincrement颿°ã¯ãã¹ãŠã®ã¬ã³ããªã³ã°ã§åãã§ãããããButtonã³ã³ããŒãã³ãã¯äžå¿
èŠã«åã¬ã³ããªã³ã°ãããŸããã
æé©åæŠç¥5ïŒé¢æ°ã³ã³ããŒãã³ãã«React.memoã䜿çšãã
React.memoã¯ã颿°ã³ã³ããŒãã³ããã¡ã¢åããé«éã³ã³ããŒãã³ãã§ããpropsã倿ŽãããŠããªãå Žåãã³ã³ããŒãã³ãã®åã¬ã³ããªã³ã°ãé²ããŸããããã¯ãpropsã®ã¿ã«äŸåããçŽç²ãªã³ã³ããŒãã³ãã«ç¹ã«åœ¹ç«ã¡ãŸãã
äŸ:
import React from 'react';
const MyComponent = React.memo(({ name }) => {
console.log('MyComponent rendered');
return Hello, {name}!
;
});
export default MyComponent;
React.memoã广çã«äœ¿çšããã«ã¯ãã³ã³ããŒãã³ããçŽç²ã§ããããšãã€ãŸãåãå
¥åpropsã«å¯ŸããŠåžžã«åãåºåãã¬ã³ããªã³ã°ããããšã確èªããŠãã ãããã³ã³ããŒãã³ãã«å¯äœçšããã£ããã倿Žãããå¯èœæ§ã®ããã³ã³ããã¹ãã«äŸåããŠããå ŽåãReact.memoã¯æé©ãªè§£æ±ºçã§ã¯ãªããããããŸããã
æé©åæŠç¥6ïŒå€§èŠæš¡ã³ã³ããŒãã³ãã®åå²
è€éãªç¶æ ãæã€å€§èŠæš¡ãªã³ã³ããŒãã³ãã¯ãããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ãªãå¯èœæ§ããããŸãããããã®ã³ã³ããŒãã³ããããå°ããã管çããããéšåã«åå²ããããšã§ãåã¬ã³ããªã³ã°ãåé¢ããŠããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸããã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã®äžéšã倿Žãããå Žåãå€§èŠæš¡ãªã³ã³ããŒãã³ãå šäœã§ã¯ãªããé¢é£ãããµãã³ã³ããŒãã³ãã®ã¿ãåã¬ã³ããªã³ã°ãããå¿ èŠããããŸãã
äŸïŒæŠå¿µçïŒïŒ
ãŠãŒã¶ãŒæ
å ±ãšã¢ã¯ãã£ããã£ãã£ãŒãã®äž¡æ¹ãåŠçãã1ã€ã®å€§èŠæš¡ãªUserProfileã³ã³ããŒãã³ããæã€ä»£ããã«ãUserInfoãšActivityFeedã®2ã€ã®ã³ã³ããŒãã³ãã«åå²ããŸããåã³ã³ããŒãã³ãã¯èªèº«ã®ç¶æ
ã管çããç¹å®ã®ããŒã¿ã倿Žããããšãã«ã®ã¿åã¬ã³ããªã³ã°ãããŸãã
æé©åæŠç¥7ïŒè€éãªç¶æ
ããžãã¯ã«useReducerã䜿çšãã
è€éãªç¶æ
é·ç§»ãæ±ãå ŽåãuseReducerã¯useStateã®åŒ·åãªä»£æ¿ææ®µãšãªãåŸãŸããç¶æ
ã管çããããã®ããæ§é åãããæ¹æ³ãæäŸããå€ãã®å Žåãããè¯ãããã©ãŒãã³ã¹ã«ã€ãªãããŸããuseReducerããã¯ã¯ãã¢ã¯ã·ã§ã³ã«åºã¥ããŠãã现ããæŽæ°ãå¿
èŠãªãè€æ°ã®ãµãå€ãæã€ããšãå€ãè€éãªç¶æ
ããžãã¯ã管çããŸãã
äŸ:
import React, { useReducer } from 'react';
const initialState = { count: 0, theme: 'light' };
function reducer(state, action) {
switch (action.type) {
case 'increment':
return { ...state, count: state.count + 1 };
case 'decrement':
return { ...state, count: state.count - 1 };
case 'toggleTheme':
return { ...state, theme: state.theme === 'light' ? 'dark' : 'light' };
default:
throw new Error();
}
}
function Counter() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
Count: {state.count}
Theme: {state.theme}
);
}
export default Counter;
ãã®äŸã§ã¯ãreducer颿°ãç¶æ
ãæŽæ°ããããŸããŸãªã¢ã¯ã·ã§ã³ãåŠçããŸããuseReducerã¯ã倿°ã®`useState`ããã¯ã«ãã£ãŠåŒãèµ·ããããå¯èœæ§ã®ããåºç¯ãªåã¬ã³ããªã³ã°ãšæ¯èŒããŠãã¡ã¢åã«ãã£ãŠç¶æ
ã®ã©ã®éšåãã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ãåŒãèµ·ããããå¶åŸ¡ã§ãããããã¬ã³ããªã³ã°ã®æé©åã«ã圹ç«ã¡ãŸãã
æé©åæŠç¥8ïŒéžæçãªç¶æ æŽæ°
ã³ã³ããŒãã³ãã«è€æ°ã®ç¶æ
倿°ãããããã®ãã¡ã®äžéšã®ã¿ã倿޿ã«åã¬ã³ããªã³ã°ãããªã¬ãŒããããšããããŸãããã®ãããªå Žåãè€æ°ã®useStateããã¯ã䜿çšããŠéžæçã«ç¶æ
ãæŽæ°ã§ããŸããããã«ãããå®éã«æŽæ°ãå¿
èŠãªã³ã³ããŒãã³ãã®éšåã«ã®ã¿åã¬ã³ããªã³ã°ãåé¢ã§ããŸãã
äŸ:
import React, { useState } from 'react';
function MyComponent() {
const [name, setName] = useState('John');
const [age, setAge] = useState(30);
const [location, setLocation] = useState('New York');
// locationã倿Žããããšãã«ã®ã¿locationãæŽæ°ãã
const handleLocationChange = (newLocation) => {
setLocation(newLocation);
};
return (
Name: {name}
Age: {age}
Location: {location}
);
}
export default MyComponent;
ãã®äŸã§ã¯ãlocationã倿Žãããšãlocationã衚瀺ããã³ã³ããŒãã³ãã®éšåã®ã¿ãåã¬ã³ããªã³ã°ãããŸããnameãšageã®ç¶æ
倿°ã¯ãæç€ºçã«æŽæ°ãããªãéããã³ã³ããŒãã³ãã®åã¬ã³ããªã³ã°ãåŒãèµ·ãããŸããã
æé©åæŠç¥9ïŒç¶æ æŽæ°ã®ãããŠã³ã¹ãšã¹ããããªã³ã°
ç¶æ æŽæ°ãé »ç¹ã«ããªã¬ãŒãããã·ããªãªïŒäŸïŒãŠãŒã¶ãŒå ¥åäžïŒã§ã¯ããããŠã³ã¹ãšã¹ããããªã³ã°ãåã¬ã³ããªã³ã°ã®æ°ãæžããã®ã«åœ¹ç«ã¡ãŸãããããŠã³ã¹ã¯ã颿°ãæåŸã«åŒã³åºãããŠããäžå®æéãçµéãããŸã§é¢æ°åŒã³åºããé å»¶ãããŸããã¹ããããªã³ã°ã¯ãç¹å®ã®æéå ã«é¢æ°ãåŒã³åºãããåæ°ãå¶éããŸãã
äŸïŒãããŠã³ã¹ïŒïŒ
import React, { useState, useCallback } from 'react';
import debounce from 'lodash.debounce'; // lodashãã€ã³ã¹ããŒã«: npm install lodash
function SearchComponent() {
const [searchTerm, setSearchTerm] = useState('');
const debouncedSetSearchTerm = useCallback(
debounce((text) => {
setSearchTerm(text);
console.log('Search term updated:', text);
}, 300),
[]
);
const handleInputChange = (event) => {
debouncedSetSearchTerm(event.target.value);
};
return (
Searching for: {searchTerm}
);
}
export default SearchComponent;
ãã®äŸã§ã¯ãLodashã®debounce颿°ã䜿çšããŠãsetSearchTerm颿°ã®åŒã³åºãã300ããªç§é
å»¶ãããŠããŸããããã«ãããããŒã¹ãããŒã¯ããšã«ç¶æ
ãæŽæ°ãããã®ãé²ããåã¬ã³ããªã³ã°ã®æ°ãæžãããŸãã
æé©åæŠç¥10ïŒuseTransitionã«ãããã³ããããã³ã°ãªUIæŽæ°
ã¡ã€ã³ã¹ã¬ããããããã¯ããUIã®ããªãŒãºãåŒãèµ·ããå¯èœæ§ã®ããã¿ã¹ã¯ã«ã¯ãuseTransitionããã¯ã䜿çšããŠç¶æ
æŽæ°ãç·æ¥ã§ãªããã®ãšããŠããŒã¯ããããšãã§ããŸããReactã¯ãç·æ¥ã§ãªãç¶æ
æŽæ°ãåŠçããåã«ããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãªã©ã®ä»ã®ã¿ã¹ã¯ãåªå
ããŸããããã«ãããèšç®éã®å€ãæäœãæ±ã£ãŠããå Žåã§ããããã¹ã ãŒãºãªãŠãŒã¶ãŒäœéšãå®çŸããŸãã
äŸ:
import React, { useState, useTransition } from 'react';
function MyComponent() {
const [isPending, startTransition] = useTransition();
const [data, setData] = useState([]);
const loadData = () => {
startTransition(() => {
// APIããããŒã¿ãèªã¿èŸŒãã·ãã¥ã¬ãŒã·ã§ã³
setTimeout(() => {
setData([1, 2, 3, 4, 5]);
}, 1000);
});
};
return (
{isPending && Loading data...
}
{data.length > 0 && Data: {data.join(', ')}
}
);
}
export default MyComponent;
ãã®äŸã§ã¯ãstartTransition颿°ã䜿çšããŠsetDataã®åŒã³åºããç·æ¥ã§ãªããã®ãšããŠããŒã¯ããŠããŸããReactã¯ãç¶æ
æŽæ°ãåŠçããåã«ãããŒãã£ã³ã°ç¶æ
ãåæ ããããã«UIãæŽæ°ãããªã©ã®ä»ã®ã¿ã¹ã¯ãåªå
ããŸããisPendingãã©ã°ã¯ããã©ã³ãžã·ã§ã³ãé²è¡äžãã©ããã瀺ããŸãã
é«åºŠãªèæ ®äºé ïŒContextãšã°ããŒãã«ãªç¶æ 管ç
å ±æç¶æ ãæã€è€éãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãReact ContextãReduxãZustandãJotaiã®ãããªã°ããŒãã«ãªç¶æ 管çã©ã€ãã©ãªã®äœ¿çšãæ€èšããŠãã ããããããã®ãœãªã¥ãŒã·ã§ã³ã¯ãç¶æ ã管çããã³ã³ããŒãã³ããå¿ èŠãšããç¶æ ã®ç¹å®ã®éšåã®ã¿ã賌èªã§ããããã«ããããšã§ãäžèŠãªåã¬ã³ããªã³ã°ãé²ãããã®ããå¹ççãªæ¹æ³ãæäŸã§ããŸãã
çµè«
useStateã®æé©åã¯ãããã©ãŒãã³ã¹ãé«ãä¿å®ããããReactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ããç¶æ
管çã®ãã¥ã¢ã³ã¹ãçè§£ãããã®ã¬ã€ãã§æŠèª¬ãããã¯ããã¯ãé©çšããããšã§ãReactã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãšå¿çæ§ã倧å¹
ã«åäžãããããšãã§ããŸããããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããããã«ã¢ããªã±ãŒã·ã§ã³ããããã¡ã€ãªã³ã°ããç¹å®ã®ããŒãºã«æãé©ããæé©åæŠç¥ãéžæããããšãå¿ããªãã§ãã ãããå®éã®ããã©ãŒãã³ã¹åé¡ãç¹å®ããã«æ©ãŸã£ãæé©åãè¡ããªãã§ãã ããããŸãã¯ãªãŒã³ã§ä¿å®ããããã³ãŒããæžããå¿
èŠã«å¿ããŠæé©åããããšã«éäžããŠãã ãããéèŠãªã®ã¯ãããã©ãŒãã³ã¹ãšã³ãŒãã®å¯èªæ§ã®ãã©ã³ã¹ãåãããšã§ãã